﻿using System;
using System.Collections.Generic;
using System.Web.Mvc;
using log4net;
using TheBullysStore.Models;
using TheBullysStore.Models.ModuloAdministracion.AreaComun;
using TheBullysStore.Models.ModuloAdministracion.Edificio;
using TheBullysStore.Models.ModuloAdministracion.TipoAreaComun;
using TheBullysStore.Models.ModuloAdministracion.ConsumoAgua;


namespace TheBullysStore.Controllers.ModuloAdministracion.AreaComun
{
    public class AreaComunController : Controller
    {
        //
        // GET: /AreaComun/

        private static ILog log = LogManager.GetLogger(typeof(AreaComunController));
        private TheBullysStoreDB db = new TheBullysStoreDB();
        AreaComunFacade areacomunFacade = new AreaComunFacade();
        EdificioFacade edificioFacade = new EdificioFacade();
        TipoAreaComunFacade tipoareacomunFacade = new TipoAreaComunFacade();

        //para consumo de Agua de las Areas Comunes
        ConsumoAguaDAO consumoAguaDAO = new ConsumoAguaDAO();
        ConsumoAguaFacade consumoAguaFacade = new ConsumoAguaFacade();

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult AreaComun()
        {
            return View();
        }

        public ActionResult RegistrarAreaComun()
        {
            return View();
        }

        public ActionResult BuscarAreasComunes()
        {
            return View();
        }
        public ActionResult RegistrarConsumoAguaAreasComunes()
        {
            return View();
        }
        public ActionResult BuscarConsumoAguaAreasComunes()
        {
            return View();
        }

        [HttpPost]
        public JsonResult cargarEdificios(EdificioBean edificio)
        {
            try {
                List<EdificioBean> listaEdificio = edificioFacade.Listaredificio(edificio);
                return Json(new { listaEdificio });
            }
            catch (Exception ex)
            {
                log.Error("CargarEdificios - GET(EXCEPTION):", ex);
                return Json(new { listaEdificio = "Ocurrió un error al cargar los Edificios" });
            } 
            
        }

        [HttpPost]
        public JsonResult cargarPisos(EdificioBean edificio)
        {
            try
            {
                List<int> listaPiso = edificioFacade.Listarpiso(edificio);
                return Json(new { listaPiso });
            }
            catch (Exception ex)
            {
                log.Error("CargarPisos - GET(EXCEPTION):", ex);
                return Json(new { listaPiso = "Ocurrió un error al cargar los Pisos" });
            } 
        }


        [HttpPost]
        public JsonResult cargarTiposAreaComun(TipoAreaComunBean tipoareacomun)
        {
            try
            {
                List<TipoAreaComunBean> listaTipoAreaComun = tipoareacomunFacade.Listartipoareacomun(tipoareacomun);
                return Json(new { listaTipoAreaComun });
            }
            catch (Exception ex)
            {
                log.Error("CargarTiposAreaComun - GET(EXCEPTION):", ex);
                return Json(new { listaTipoAreaComun = "Ocurrió un error al cargar los Tipos de Area Comun" });
            } 
        }

        [HttpPost]
        public JsonResult registrarAreaComun(AreaComunBean areacomun)
        {
            try
            {
                string conexion = areacomunFacade.Registrarareacomun(areacomun);

                if (conexion == "Bien")
                {
                    return Json(new { me = "Se ingreso correctamente " + areacomun.NombreArea });
                }
                else
                {
                    return Json(new { me = conexion });
                }
            }
            catch (Exception ex)
            {
                log.Error("Registrar Área Común - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            } 
        }

        public JsonResult buscarAreaComun(AreaComunBean areacomun)
        {
            try
            {
                List<AreaComunBean> listaAreaComun = areacomunFacade.Listarareacomun(areacomun);
                return Json(new { listaAreaComun });
            }
            catch (Exception ex)
            {
                log.Error("Buscar Área Común - GET(EXCEPTION):", ex);
                return Json(new { listaAreaComun = "Ocurrió un error al buscar" });
            }
        }

        [HttpPost]
        public JsonResult eliminarAreaComun(AreaComunBean areacomun)
        {
            try
            {
                string conexion = areacomunFacade.Eliminarareacomun(areacomun);
                
                return Json(new { me = "Se eliminó correctamente " + areacomun.NombreArea + " del piso " + areacomun.Piso + " del Edificio " + areacomun.NombreEdificio });
                
            }
            catch (Exception ex)
            {
                log.Error("Eliminar Área Común - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al eliminar" });
            }
        }

        [HttpPost]
        public JsonResult modificarAreaComun(AreaComunBean areacomun)
        {
            try
            {
                string conexion = areacomunFacade.Modificarareacomun(areacomun);

                if (conexion == "Bien")
                {
                    return Json(new { me = "Se modificó correctamente " + areacomun.NombreArea + " del piso " + areacomun.Piso + " del Edificio " + areacomun.NombreEdificio });
                }
                else
                {
                    return Json(new { me = conexion });
                }
            }
            catch (Exception ex)
            {
                log.Error("Modificar Área Común - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al modificar" });
            } 
        }

        //Consumo de Agua
        [HttpPost]
        public JsonResult cargarEdificiosR(string verificador)
        {
            try
            {
                List<EdificioR> listaEdificios = consumoAguaDAO.listarEdificiosR();
                return Json(new { listaEdificios });
            }
            catch (Exception ex)
            {
                log.Error("Cargar Edificio- GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al cargar" });
            }
        }
        [HttpPost]
        public JsonResult buscarConsumoAgua(BusquedaConsumoAgua busquedaConsumoAgua)
        {
            try
            {
                List<ConsumoAguaBean> listaConsumoAgua = consumoAguaDAO.listarConsumoAguaAreaComun(busquedaConsumoAgua);
                return Json(new { listaConsumoAgua });
            }
            catch (Exception ex)
            {
                log.Error("Buscar Consumo de Agua- GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al buscar" });
            }
        }
        [HttpPost]
        public JsonResult cargarPeriodos(string verificador)
        {
            try
            {
                List<string> listaPeriodos = consumoAguaFacade.listarPeriodos();
                return Json(new { listaPeriodos });
            }
            catch (Exception ex)
            {
                log.Error("Cargar Eficio- GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al cargar" });
            }
        }
        [HttpPost]
        public JsonResult cargarAreaComun(string id_edificio)
        {
            try
            {
                List<Area_Comun> listaPisos = consumoAguaDAO.buscarAreaComun(id_edificio);
                return Json(new { listaPisos });
            }
            catch (Exception ex)
            {
                log.Error("Cargar Area Comun- GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al cargar" });
            }
        }
        [HttpPost]
        public JsonResult cargarDepartamentosR(string id_edificio, string piso)
        {
            try
            {
                List<DepartamentoR> listaDepartamentos = consumoAguaDAO.listarDepartamentosR(id_edificio, piso);
                return Json(new { listaDepartamentos });
            }
            catch (Exception ex)
            {
                log.Error("Cargar Departamento- GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al cargar" });
            }
        }
        [HttpPost]
        public JsonResult mantenerConsumoAgua(ConsumoAguaBean consumoAgua)
        {
            try
            {
                string mensaje = consumoAguaDAO.mantenerConsumoAguaAreaComun(consumoAgua);
                return Json(new { mensaje });
            }
            catch (Exception ex)
            {
                log.Error("Mantener Consumo de Agua- GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al realizar el Mantenimiento" });
            }
        }
        [HttpPost]
        public JsonResult cargarUltimaFechaRegistrada(string id_departamento)
        {
            try
            {
                Conjunto conjunto = consumoAguaDAO.cargarUltimaFechaRegistradaAreaComun(id_departamento);
                return Json(new { conjunto });
            }
            catch (Exception ex)
            {
                log.Error("Cargar Ultima Fecha Registrada- GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al cargar" });
            }
        }
        [HttpPost]
        public JsonResult verificarModificacion(ConsumoAguaBean consumoAgua)
        {
            try
            {
                string mensaje = consumoAguaFacade.verificarModificacion(consumoAgua);
                return Json(new { mensaje });
            }
            catch (Exception ex)
            {
                log.Error("Verificar Modificacion- GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al verificar" });
            }
        }
    }
}
